function logged(value, context) {
  console.log(value, 'value')
  console.log(context, 'context')
  if (context.kind === 'class') { // 装饰器装饰的是一个类
    return class extends value { // 重写被装饰的类
      constructor(...args) {
        super(...args)
        console.log('被装饰的类额外逻辑')
      }
    }
  }
}

class C {
  constructor( num) {
    this.num = num
  }
}

// 使用装饰器产生一个新类
let newClass = logged(C, { kind: 'class', name: 'C' })


const c = new newClass(1)
console.log(c.num)